/*
    SUSAN® - Sole of Unix Save ANything

   Copyright (C) 2009-2010 Hechzh Property
      Copyright (C) 2011-2016 Skyatlas Co. LTD

   

   
*/

/*
 *  Marco van Wieringen, August 2009
 */

#ifndef BAREOS_LIB_MNTENT_CACHE_H_
#define BAREOS_LIB_MNTENT_CACHE_H_ 1

/*
 * Don't use the mountlist data when its older than this amount
 * of seconds but perform a rescan of the mountlist.
 */
#define MNTENT_RESCAN_INTERVAL 1800

/*
 * Initial size of number of hash entries we expect in the cache.
 * If more are needed the hash table will grow as needed.
 */
#define NR_MNTENT_CACHE_ENTRIES 256

/*
 * Number of pages to allocate for the big_buffer used by htable.
 */
#define NR_MNTENT_HTABLE_PAGES 32

struct mntent_cache_entry_t {
  dlink link;
  uint32_t dev{0};
  char* special{nullptr};
  char* mountpoint{nullptr};
  char* fstype{nullptr};
  char* mntopts{nullptr};
  int reference_count{0};
  bool validated{false};
  bool destroyed{false};
};

mntent_cache_entry_t* find_mntent_mapping(uint32_t dev);
void ReleaseMntentMapping(mntent_cache_entry_t* mce);
void FlushMntentCache(void);

#endif /* BAREOS_LIB_MNTENT_CACHE_H_ */
